{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from IPython.core.interactiveshell import InteractiveShell\n",
    "InteractiveShell.ast_node_interactivity = 'all'  # default is ‘last_expr’\n",
    "\n",
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "sys.path.append('/Users/siyuyang/Source/Repos/GitHub_MSFT/CameraTraps')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "import os\n",
    "from collections import defaultdict, Counter\n",
    "from random import sample\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib\n",
    "from tqdm import tqdm\n",
    "from azure.storage.blob import BlobServiceClient\n",
    "from PIL import Image\n",
    "\n",
    "# requires the TF Object Detection API be installed\n",
    "from detection.detector_eval import detector_eval  # detector_eval.py functions in this directory\n",
    "from visualization import visualization_utils as viz_utils"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# MegaDetector v4 experiments - evaluation\n",
    "\n",
    "For MDv2 results, some locations in its training set are in this test set (MDv4 test set)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "mdv4boxes_label_path = '/Users/siyuyang/OneDrive - Microsoft/AI4Earth/CameraTrap/Databases/query_results/bboxes_inc_empty_20200325.json'\n",
    "\n",
    "res_dir = '/Users/siyuyang/OneDrive - Microsoft/AI4Earth/CameraTrap/MegaDetectorEval/megadetectorv4/mdv4_1_results'\n",
    "test_set_res_paths = {\n",
    "    'MDv4.1 cos LR aug epoch 5.8': '2891_detections_mdv4_1_run10_step3016k_on_test_20200427004012.json',\n",
    "    'MDv4.1 cos LR aug epoch 3.8': '7230_detections_mdv4_1_run10_step1976k_on_test_20200427003838.json',\n",
    "    'MDv4.1 cos LR epoch 5.6': '1831_detections_mdv4_1_run9_step2912k_on_test_20200427003715.json',\n",
    "    'MDv4.1 epoch 7.6': '6725_detections_mdv4_1_run5_step3952k_on_test_20200427003551.json',\n",
    "    'MDv4.1 epoch 5.8': '1654_detections_mdv4_1_run5_step3016k_on_test_20200427003431.json',\n",
    "    'MDv4 aug': '6706_detections_mdv4_aug_run4_step1160k_on_test_20200427005009.json',\n",
    "    'MDv4 baseline': '3014_detections_mdv4_on_test_20200427004828.json'\n",
    "}\n",
    "\n",
    "out_dir = '/Users/siyuyang/OneDrive - Microsoft/AI4Earth/CameraTrap/MegaDetectorEval/megadetectorv4/mdv4_1_results/plots'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Matching label and predicted boxes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "test_set_res = {}\n",
    "for checkpoint_name, out_name in test_set_res_paths.items():\n",
    "    with open(os.path.join(res_dir, out_name)) as f:\n",
    "        test_set_res[checkpoint_name] = json.load(f)['images']\n",
    "    print('{}, number of results: {}'.format(checkpoint_name, len(test_set_res[checkpoint_name])))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# for numerical IDs from output files of the API, and names in the MegaDB\n",
    "label_map_name_to_id = {\n",
    "    'animal': 1,\n",
    "    'person': 2,\n",
    "    'vehicle': 3\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'file': 'mdv4_images/test/wcs+8a02345a-3f14-11ea-92bb-9801a7a664ab.jpg',\n",
       " 'max_detection_conf': 1.0,\n",
       " 'detections': [{'category': '1',\n",
       "   'conf': 1.0,\n",
       "   'bbox': [0.3468, 0.4422, 0.2385, 0.2146]},\n",
       "  {'category': '1', 'conf': 0.987, 'bbox': [0.9007, 0.3621, 0.0985, 0.1064]}]}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_set_res['MDv4 baseline'][100]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "20468"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_set = set([i['file'].split('/')[-1].split('.jpg')[0] for i in test_set_res['MDv4 baseline']])\n",
    "len(test_set)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open(mdv4boxes_label_path) as f:\n",
    "    mdv4boxes_labels = json.load(f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "570092"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "{'bbox': [{'category': 'animal', 'bbox': [0.2, 0.722, 0.232, 0.221]},\n",
       "  {'category': 'animal', 'bbox': [0.221, 0.637, 0.0895, 0.122]}],\n",
       " 'file': 'Beaverhead_elk/AM58/Trip 1/100RECNX/2016-02-03 12-48-58 M 2_5.JPG',\n",
       " 'dataset': 'idfg',\n",
       " 'location': 'Beaverhead_elk+AM58',\n",
       " 'download_id': 'idfg+4e999ed1-659e-4f74-b396-3998463b8ae6',\n",
       " 'new_entry': True}"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(mdv4boxes_labels)\n",
    "mdv4boxes_labels[100]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20468\n"
     ]
    }
   ],
   "source": [
    "mdv4boxes_labels_dict = {}\n",
    "for i in mdv4boxes_labels:\n",
    "    if i['download_id'] in test_set:\n",
    "        mdv4boxes_labels_dict[i['download_id']] = i\n",
    "print(len(mdv4boxes_labels_dict))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'bbox': [{'category': 'animal', 'bbox': [0.02823, 0.2205, 0.02278, 0.08518]}],\n",
       " 'file': 'Maliau/Maliau_3/OG1-E-38/20120416-005602(2)10 of 10.jpg',\n",
       " 'dataset': 'zsl_borneo',\n",
       " 'location': 'OG1-E-38',\n",
       " 'download_id': 'zsl_borneo+88b7a35a-3f14-11ea-97a2-9801a7a664ab'}"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mdv4boxes_labels_dict['zsl_borneo+88b7a35a-3f14-11ea-97a2-9801a7a664ab']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_set_by_dataset = defaultdict(int)\n",
    "for i in mdv4boxes_labels:\n",
    "    if i['download_id'] in test_set:\n",
    "        test_set_by_dataset[i['dataset']] += 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "sorted(test_set_by_dataset.items(), key=lambda x: x[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Compute metrics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "checkpoint_metrics = {}\n",
    "\n",
    "for checkpoint_name, detection_res in test_set_res.items():\n",
    "    print(checkpoint_name)\n",
    "    \n",
    "    per_image_gts, per_image_detections = detector_eval.get_per_image_gts_and_detections(\n",
    "        mdv4boxes_labels_dict, detection_res, label_map_name_to_id)\n",
    "        \n",
    "    print('Lengths of per_image_gts is {}, per_image_detections is {}'.format(\n",
    "        len(per_image_gts), len(per_image_detections)))\n",
    "    \n",
    "    per_cat_metrics = detector_eval.compute_precision_recall_bbox(per_image_detections, per_image_gts, 3, \n",
    "                                                    matching_iou_threshold=0.5)\n",
    "\n",
    "    checkpoint_metrics[checkpoint_name] = per_cat_metrics\n",
    "    print('one_class average precision is {}'.format(per_cat_metrics['one_class']['average_precision']))\n",
    "    print('-----------')\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Plot precision-recall"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "categories = {\n",
    "    1: 'animal',\n",
    "    2: 'person',\n",
    "    3: 'vehicle',\n",
    "    'one_class': 'one class'\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MDv4.1 cos LR aug epoch 5.8\n",
      "1\n",
      "0.8701549161772134\n",
      "2\n",
      "0.9306805816326822\n",
      "3\n",
      "0.9096424325990644\n",
      "one_class\n",
      "0.8788542894327809\n",
      "mAP is 0.9034926434696534\n",
      "-----------\n",
      "MDv4.1 cos LR aug epoch 3.8\n",
      "1\n",
      "0.8681920422685518\n",
      "2\n",
      "0.932010653519139\n",
      "3\n",
      "0.9037144486960861\n",
      "one_class\n",
      "0.8769928955170816\n",
      "mAP is 0.9013057148279257\n",
      "-----------\n",
      "MDv4.1 cos LR epoch 5.6\n",
      "1\n",
      "0.8780303028152383\n",
      "2\n",
      "0.9342826979123573\n",
      "3\n",
      "0.8969026947933176\n",
      "one_class\n",
      "0.8861010194865517\n",
      "mAP is 0.9030718985069711\n",
      "-----------\n",
      "MDv4.1 epoch 7.6\n",
      "1\n",
      "0.8780935893887386\n",
      "2\n",
      "0.9339168303685309\n",
      "3\n",
      "0.9166736916587306\n",
      "one_class\n",
      "0.8863746452552632\n",
      "mAP is 0.9095613704720001\n",
      "-----------\n",
      "MDv4.1 epoch 5.8\n",
      "1\n",
      "0.8786706792453995\n",
      "2\n",
      "0.9330299798452961\n",
      "3\n",
      "0.9203857837466889\n",
      "one_class\n",
      "0.8864350253142375\n",
      "mAP is 0.9106954809457948\n",
      "-----------\n",
      "MDv4 aug\n",
      "1\n",
      "0.8720859293686467\n",
      "2\n",
      "0.9266237345639334\n",
      "3\n",
      "0.9036554968836412\n",
      "one_class\n",
      "0.8799355238385914\n",
      "mAP is 0.9007883869387404\n",
      "-----------\n",
      "MDv4 baseline\n",
      "1\n",
      "0.8693864959891899\n",
      "2\n",
      "0.9211235610439354\n",
      "3\n",
      "0.8980362991143584\n",
      "one_class\n",
      "0.8766742886770814\n",
      "mAP is 0.8961821187158279\n",
      "-----------\n"
     ]
    }
   ],
   "source": [
    "for checkpoint_name, per_cat_metrics in checkpoint_metrics.items():            \n",
    "    print(checkpoint_name)\n",
    "    average_precision_category = []\n",
    "    for cat in categories:\n",
    "        print(cat)\n",
    "        ave_prec = per_cat_metrics[cat]['average_precision']\n",
    "        print(ave_prec)\n",
    "        if cat in [1, 2, 3] and ave_prec > 0:\n",
    "            average_precision_category.append(ave_prec)\n",
    "    \n",
    "    mAP = sum(average_precision_category) / len(average_precision_category)\n",
    "    print('mAP is {}'.format(mAP))\n",
    "    print('-----------')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['MDv4.1 cos LR aug epoch 5.8',\n",
       " 'MDv4.1 cos LR aug epoch 3.8',\n",
       " 'MDv4.1 cos LR epoch 5.6',\n",
       " 'MDv4.1 epoch 7.6',\n",
       " 'MDv4.1 epoch 5.8',\n",
       " 'MDv4 aug',\n",
       " 'MDv4 baseline']"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(test_set_res_paths.keys())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Cosine decay learning rate vs step learning rate\n",
    "runs_to_show = [\n",
    "    'MDv4.1 epoch 5.8',\n",
    "    'MDv4.1 cos LR epoch 5.6'\n",
    "]\n",
    "\n",
    "cat_to_fig = {}\n",
    "for cat, cat_label in categories.items():\n",
    "    fig = matplotlib.figure.Figure(figsize=(3, 3), dpi=150)\n",
    "    ax = fig.add_axes((0, 0, 1, 1))\n",
    "    \n",
    "    for checkpoint_name in runs_to_show:\n",
    "        per_cat_metrics = checkpoint_metrics[checkpoint_name]\n",
    "        \n",
    "        _ = ax.plot(per_cat_metrics[cat]['recall'], per_cat_metrics[cat]['precision'], \n",
    "                    label=checkpoint_name,\n",
    "                    linewidth=1)  \n",
    "    \n",
    "    _ = ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.2), shadow=False, ncol=2)\n",
    "    _, _ = ax.set_xlim(left=0.0, right=1.0)\n",
    "    \n",
    "    _ = ax.set_xlabel('Recall')\n",
    "    _ = ax.set_ylabel('Precision')\n",
    "    _ = ax.set_title('category: ' + cat_label)\n",
    "    \n",
    "    cat_to_fig[cat] = fig"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAB04AAAIiCAYAAABPOOuWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAewgAAHsIBbtB1PgAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdd3gc1bnH8e+7q2bJHfdOMQZTTTEd03tJgEtISCEQCCUQ0m4gIQmBBEhIQiAJEEoCBNIuEAgh9N5MM83Yphgb9ypbltWlPfePM6sdrXe1K2lXK1m/z/OMd3bmzJl3Z0fWqzkz55hzDhERERERERERERERERGRvixS6ABERERERERERERERERERApNDaciIiIiIiIiIiIiIiIi0uep4VRERERERERERERERERE+jw1nIqIiIiIiIiIiIiIiIhIn6eGUxERERERERERERERERHp89RwKiIiIiIiIiIiIiIiIiJ9nhpORURERERERERERERERKTPU8OpiIiIiIiIiIiIiIiIiPR5ajgVERERERERERERERERkT5PDaciIiIiIiIiIiIiIiIi0uep4VRERERERERERERERERE+jw1nIqIiIiIiIiIiIiIiIhIn6eGUxERERERERERERERERHp89RwKiIiIiIiIiIiIiIiIiJ9nhpORURERERERERERERERKTPU8OpiIiIiIiIiIiIiIiIiPR5ajgVERERERERERERERERkT5PDaciIiIiIiIiIiIiIiIi0uep4VRERERERERERERERERE+jw1nIqISJ9iZkeZmQumRwsdT3fpq59bRERERERERKQ3MbO/h67hnJajOs8N1XlzLurMsL+Zof3tne/9ieSSGk5FREREREREREREREREpM9Tw6mIdJmZTQrdQbSw0PGIiIiIbA6UY4mIiIjkjnIrERHJhhpORURERERERERERERERKTPKyp0ACIiIt3JOfcoYIWOQ0REREREREREpDs4524G8j62qcjmQE+cioiIiIiIiIiIiIiIiEifp4ZTEREREREREREREREREenz1HAq0kuZ2UAzu9DMHjKzhWa20cwazGyZmT1lZj8xsx3a2b6fmX3GzG4wsxfNbKWZNQb1LDSz+83sTDMraaeOM8zMAQtCiyeamUs1Zfg825vZVWb2WiiW1Wb2qpld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CTUxZtS8Vq1adS8598XLiBEj2lRmWzNmzKg3ePDg9i1btuyenJzcIzMzs3tWVtbx8+bNS4nW+AEAAKLBzF4zM2dma8p4fqP3/PM1PTYAscU/jgEAAICAiI+Pd5s2bUr84IMP6l900UU5JZ9/5ZVXGsfHx7vCwsIyC6BDhgzZ1aVLl4POOeXk5MR99913ybNmzUqbOnVq+v/+7/8enDhx4ne9e/c+UF1jHjt2bIvvv/8+qSqvfeSRR5ovXLgwNTU1tbBx48b5GzdurNJ2apN+/frt7d279z5J2rFjR8KcOXPqv/rqq02nTZvW6IsvvljesmXLgliPEdUvNTW18Prrr/+h5OPFvwuReOmllxpdd911xyclJRVdcMEFu1q0aJH/3XffJU2bNq3htGnTGr7xxhtrhg0btrd6Rw4AAKqLmQ2QNLOMpw9Kypa0VNJ7kl51zuXW0NAAwFconAIAAAAB0bNnz9x///vf9V588cWMkoXTLVu2JMycOTOtf//+e2fOnJlW1jZ++ctf7rrmmmt2hT+2d+/euNtuu63lM8880ywrK6vTokWLlrdt2zb/aMe7YMGClMcee6z5H//4x4133XVX68q+/t57793UqlWr/K5du+Y9/vjjGb/73e/aHu2YjnXnnnvu3nvuuWdb8f2CggINHDiw45w5cxrcf//9TR9++OHNsRwfoqNBgwaFDz300FHN7b333tvSzDRr1qyV4TtHTJw4Me2KK67oMH78+BYUTgEAOGYlS2rlLRdIus3MhjrnvortsACg5nGqXgAAACAg6tatWzRkyJBdH330UaM9e/Yc9m+B559/Pj0/P99Gjhy5o7LbbdCgQdHTTz+98dJLL92RnZ2d8Ic//KFFltQPgAAAIABJREFU8XOtW7fulpaWdkpZp/Ht2rXrCcnJyT127tx52Hjy8/N1zTXXtO3Wrdv+sWPHHnGkXCTOP//83G7duuXFxR39P3vWr19f55prrmndpk2bbklJST0aNWp08mmnndb50UcfzSg57nHjxjXr3Llz1+Tk5B7169c/pV+/fp3eeeedBiW3uX//fvvDH/7QrFOnTl3r1at3ar169U497rjjul188cVtly1bViNHxyYkJOjqq6/eIUlffvll3Uhf9+qrrzbMyso6PjMzs3tycnKPBg0anNKvX79OkydPPuKanMWnCS75XknS1KlT65tZzzFjxrQs+dx9993XpF27dicmJSX1yMzM7D527Njmy5cvTzSznsOGDWsb6Vi///77hKuvvrp1ZmZm98TExB4ZGRknDx06tN3KlSsTS7Y1s56nn35659WrVycOGTLk+LS0tFNSUlJO7dOnT6eZM2eW+v58/vnnKUOGDDk+PT395MTExB6tW7fudsMNN2RmZ2fHl9Z+7ty5dbOyso5v0qTJSYmJiT2aNWt20uDBg9tPmzYttbT2zz//fKPiv5MmTZqcdPXVV7fOzc2t9tNiV2TTpk1JzZo1O1TyiPJf/vKXe+Li4rRr1y52zAYA4NjxlKTuYcs5km6QtNp7/jhJH5oZ11sHEDj8wwYAAACBll9YpC27D9SJ9Tgq0qJhSn6d+KMvAF533XU73n777YyXXnqp0c0335xd/Pjrr7/euFOnTgf69Omzv6rbvueee7a8+eabjd9///1GRUVF38fFxemSSy7Z+eijj7Z466230q666qrd4e2/+OKL5BUrVtS98MILd6Wnpx924dWxY8e2+Pbbb1Pmz5+/PD6+1PpTjfniiy+SzzvvvM7Z2dkJvXv3zrnooot27d27N37p0qV1n3rqqWY33XRTtiQVFRVpyJAh7T/++OOG7dq1Ozhy5MgfcnJy4qZOnZo+bNiwjg8++OD63//+9z8WpocNG9buo48+atSjR4/cyy67bHtcXJw2bNiQOHPmzIZff/31rhNPPDGvJn6+4mvexsfHu0hf88c//rFVYmKi69OnT06zZs3yt27dWmf69OkNhw0b1unFF1/8duTIkbsr3krZfvOb37R64oknmjdr1iz/yiuv3F5YWKjnn3++6YIFC0otLpZl6dKlSeeee27n7OzsOv3799+TlZW1a+PGjYkffPBBo9mzZzeYO3fuypLv8549e+LPPvvszk2aNMm/8sortxe3HzJkSJf33ntv1eDBg388ve20adNSf/GLX3QsKCiwIUOG7GrduvWhBQsWpD7zzDPNZsyY0eCzzz5bGf67/dxzzzX6z//8z3ZxcXEaNGjQ7rZt2+Zt27atzueff576xhtvNDr//PMPOyXeE0880eSTTz5JGzRo0O5+/frlzJw5M+2VV15punPnzoR33313baTvw6FDh+yxxx7L2LRpU51GjRoV9u/fP7dv376VOqV2+/btD6xevbruggULUsKLp2+99VZaUVGR+vbte8TpvwEAgG/94Jz7d4nHZpnZS5I+lDRQUgtJoyU9WNODA4BYonAKAACAQNuy+0Cd/vfPOinW46jI7FsHfN0mo95Rn/72/PPPz23dunXea6+91ri4cDpv3ryUVatWpYwbN27D0Wy7c+fOh1q0aHFoy5YtiStXrkzs2rXroeuuuy770UcfbfH666+nlyycvvTSSxmSdMUVV2SHP/7555+nPProoy1uvvnmLT169Dh4NGOqDldddVW77OzshMcff3ztjTfeuDP8uW+//fbHovsTTzyR8fHHHzfs27dvzsyZM79JSkpykrRq1aqtvXv37jp27Ng2w4YN292mTZuC7Ozs+GnTpjUaPHjw7unTp38bvs2DBw/agQMHauSIwoKCAr3yyiuNJalv374RX8fqww8//KZLly6Hwh/bsGFDQq9evbreddddmUdTOF2yZEnyU0891bxVq1aHlixZsrxJkyaFkrRp06Ytp556atfKbGvEiBHtdu3alfDuu++uysrK+vHnmzZtWmpWVlbn3/zmN61nzpy5Jvw1q1evThk6dOjOSZMmrS0+WnnSpEnZw4YN63jjjTcet3r16uWSVFhYqOuvv75tXl5e3DvvvLN66NChPxYOR40alfnCCy80u+WWW1q9+OKLG6TQka833XRT2+Tk5KKZM2eu7NWr14+/20VFRfr++++P2IFj7ty5DebPn7/85JNPzpOk3NzcTd26dTtx6tSp6evWrdsY6Smxd+zYUeemm25qG/7YWWedtfeNN95Y26JFi4iua/uXv/xl4/DhwzsMGDCgywUXXLCrZcuW+d99913Sv/71r4YDBw7c/fDDD2+KZDsAAMC/nHOHzGycQoVTSRosCqcAAoZT9QIAAAABEhcXp+HDh2cvXrw4tfh0sM8991zjhIQEd/311++s6PUVadKkSb4kbdu2LUGSTjrppLwTTzxx/8yZMxuGn7q0qKhIkyZNSm/YsGFB+HURi0/R265du4P33nvv1qMdz9GaMWNGveXLl9ft27dvTsmiqSS1b9/+x8LV66+/niFJf/3rXzcWF02lUEH52muv/SEvL89efvnldEkyM+ecU1JSUlHJbSYnJ7tGjRod8Xh1+PjjjxuMGTOm5ZgxY1qOHDmydceOHU+cO3dug27duu2/5ZZbtke6nZJFU0lq3bp1wZAhQ3Zt2LAhadWqVUecBjdSEyZMSC8qKtJvfvObrcVFU0lq1apVwejRo7eV99pw8+bNS/nyyy/rDR8+fEd40VQK7UBw7rnn7p49e3ZayVPqxsfH6/77798UfornSy65ZG/fvn33fvPNNynz5s1LkaTp06enbtiwIWnAgAF7woumkjR+/PgtqamphW+//XZG8RG9zzzzTOODBw/G/frXv94WXjSVQn+XpRVBR40a9UNx0VSSUlNT3SWXXLLTOadPP/00olMrX3bZZTumTp26avPmzV/t3Llzyccff7yyf//+e+bMmdMgKyurQ/H4KvLzn/88Z/r06asyMjIKJk+enPHkk082/+ijjxq1adMm79prr92RkZFRWPFWAADAMeCLsPXW5TU0swwzu9vMPjOzHWaWZ2abzWyymV0cSWdm1sDMbjWzmWa2NWwbC8zsL2Z2aimviTezQWb2oJl96vWdb2a7zGyJmd1vZuWOHQDKwhGnAAAACLQWDVPyZ9864OtYj6MiLRqmHPXRpsVGjx6d/dBDD7V89tlnM8aPH79lypQp6QMGDNjTsmXLgqMpeEmSc0ee7XX48OHZd999d+sJEyY0LD7K9V//+le9zZs3J1555ZXbw4uMd955Z4tVq1bVnTFjxorwx2Pls88+qytJAwcO3FNR2xUrVtStV69e0ZlnnnnE6Y4HDhyY8/DDD7f46quv6kpSenp60RlnnLF36tSp6T179ky86KKLdg8YMCDnzDPP3F+nTvTOHP3pp582+PTTTw+73mr37t33zZs3b3X9+vUjLtauX7++zt133938k08+Sdu6dWtiXl7eYUfIbtiwoU7nzp2PKK5G4t///neKJPXv3/+II2DPPPPMfUe+onRz585NlaQtW7bUKe0aqtu3b69TVFSkZcuWJfXv3//HOWvevPmhjh07HjH2vn375s6fP7/B4sWL655xxhkHFi9eXNcb5xGnqM3IyCg84YQTDixcuDD1m2++SezcufOh4vZDhgyp8HepWK9evY74eTMzMw9J0q5duyI6h/UDDzywJfz+wIED95199tlrevfu3Xnx4sWp77zzToPwnRfK8uabbza47rrrjh88ePDucePGbTn++OMPLV26NPmOO+5odeWVV3bYsGHD93fccUfExXcAAOBb4TtDlXlmCjP7maQJktJKPNVC0lBJQ83sXUmXO+dKzXBmdr6k1yVllLKNFpJOl3SLjqxj/EnSnaVssqGkU7zl12Z2uXPu3bJ+BgAoDYVTAAAABFqd+DhVxylwjyUdO3Y81Lt375w333wzo3v37gd2796dMHLkyOyKX1mx7du315Gk8NN/XnvttTv/9Kc/Zf7jH//IKC6cvvLKKxmSFN7v119/nfTII4+0GDVq1LbwQlYs7dmzJ16SWrZsWeHvyL59++JbtWpV6nVJW7VqlS9Je/fu/bHY9f777387duzYFlOmTEm/5557Mu+55x41bNiwYOTIkdvHjx+/JRqF47vuumvjPffcs62wsFCrVq1KvPPOO1tOnjw54/LLLz/uvffei+iamVu3bo0//fTTT9i+fXudHj165J5zzjl70tLSCuPi4jR37tz6CxcuTD148GCVz26Um5sbLx3+O1SsRYsWEf+t7ty5M16SZsyY0XDGjBkNy2qXk5Nz2FgbN25cah/NmzfPl376nSiey2bNmpXavmnTpvnh4yhu36ZNm4h/hrS0tCOK2QkJCU6SCgsLq3w65/j4eF155ZU7Fi9enDpnzpzUigqn27Ztix81atTxxx13XN5bb721rvi6w3379j0wderU7zp06NDtf/7nf1rdfPPNO5KTk2O+wwMAADgq4ZdGWFdaAzMbIukdSfGSvpP0tKQFkvZKypR0uaTLJP1c0ouShpeyjUGS3ve2USDpVUnvStogKVnSiZKGSLqglCEkSNrsjWG+N4Y8hY6QPVPSryXVk/R3M+vhnFsV4c8OAJyqFwAAAAiiq666asfWrVsT77zzztbp6ekFv/zlLyM+Cq4sK1euTNy6dWtiw4YNCzp16vTjEXutWrUq6NevX87ChQvrr127tk5eXp598MEHjVq3bp03aNCgH/c+/+qrr1Ly8/PtmWeeaWZmPcMXSVqzZk2ymfVs1apV96Mda6QaNmxYKEmbN2+u8DDQevXqFWZnZ5fabvPmzQmSVL9+/R/34E9LSyt68sknN23atGnp0qVL/33//fevb9q0af7f/va3FnfccUeL6voZShMfH6+uXbseevvtt9f16tUrd+rUqemvvvpqmcXFcI8//njjH374oc7tt9++adGiRateeumlDY888sjmhx56aHPHjh0PlGxffMrbgoKCIwp9u3fvPuKoyXr16hVK0pYtW47Y0XfLli0RH47boEGDIkkaP3789865xWUtJU/jm52dXeoOxtu2basjSWlp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8ccffOCBBzYXt2/Tpk3Bo48+uu7Xv/51uzPOOKPr4MGDd7dt2zZv+/btCQsWLKg/cODAPS+++OKGiH6wCE2ePDntz3/+c+bpp5+e07Zt27y6desWrVq1KnnOnDlpZqYHHnhgffv27Q/7e73iiivaLVy4MPW9995bfdFFF+VIUocOHfJHjx699amnnmp+5plndh08ePCuzMzMQ2vWrEmeMWNGw7i4OI0fP75axw4AAGJmtaS/OufKugZ6L+82yyu6RqJ5ifunercLyzpitSJm1k7Sf0n6maSKCqONJX1flX4ABA+FUwAAAAAR+/DDDxt9+OGHiouLU926dQsbN26cP2DAgD0XXXTRnhEjRuxKSUkp8z9PRowYkT1lypT0wsJCGz58eNRPt7tkyZK6kyZNygh/bNmyZXWXLVv245GekRQVe/TocXDRokXL77777hYzZsxIW7RoUWr9+vULO3TocPDGG2/cVtwuPj5eH3300bd//vOfm77xxhsZL730UtM6deq4bt267bv11lu3Dhs27Mf/fOrUqdOhMWPGbJ49e3aDOXPmNNizZ09Cenp6Qc+ePXNuu+22beeff35u6aM50rZt2+qU/DnDRfIz9u7d+8B55523a9q0aY2eeuqpjN/+9rfZZbXt0KFD/kcffbTq1ltvzfzkk08aSNIpp5yyb/r06SunTJnSsGThVJImTpy4/re//W2Bdy3Vpu3atTv40EMPrc/MzMwvWTiVpCeeeGJTq1at8p9//vmmEyZMaNKkSZP8q6++evuQIUP2zpo1Ky01NbXicwpLOvHEE/OWLFmy/N57723+0UcfNfzHP/7RJCEhwTVt2vTQoEGDdl9xxRVH/B6mpaUVvvfee2tuuummzNdee63JoUOHrEePHrn33XffpoEDBx62s0FWVlbujBkzVv7pT39qMXv27Aa5ubnxzZo1y7/++uu33XfffVsyMjIOG+f111+/q1OnTnn33Xdfi3nz5tWfPn16w/T09IKTTz55369+9atq/5s466yzcs8///xdS5curffll1+m5uXlWXp6esGFF164a8yYMdtK/jzlefLJJzeddNJJB1588cUms2bNSjtw4EB8WlpawcCBA3fffvvtW8OvVwwAAHzvKUlPeusJklpK+rmkaxW6PugsM+vnnFsV/iIzS5Z0xBk7IlDyTCvF2fWIM9VEwswukvSm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\n",
      "text/plain": [
       "<Figure size 2200x500 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "runs_to_show = [\n",
    "    'MDv4.1 cos LR epoch 5.6',\n",
    "    'MDv4.1 cos LR aug epoch 5.8'\n",
    "]\n",
    "\n",
    "fig, (ax1, ax2, ax3) = plt.subplots(ncols=3, sharex=True, figsize=(11, 2.5), dpi=200)\n",
    "\n",
    "\n",
    "for cat, cat_label, ax in zip([1, 2, 3], ['animal', 'person', 'vehicle'], [ax1, ax2, ax3]):\n",
    "    for checkpoint_name, per_cat_metrics in checkpoint_metrics.items():\n",
    "        if checkpoint_name not in runs_to_show:\n",
    "            continue\n",
    "            \n",
    "        _ = ax.plot(per_cat_metrics[cat]['recall'], per_cat_metrics[cat]['precision'], \n",
    "                    label=checkpoint_name,\n",
    "                    linewidth=0.8)  \n",
    "        _, _ = ax.set_xlim(left=0.0, right=1.0)\n",
    "        _, _ = ax.set_ylim(bottom=0.0, top=1.0)\n",
    "        \n",
    "        if cat == 3:\n",
    "            _ = ax.set_xlabel('Recall')\n",
    "        if cat == 1:\n",
    "            _ = ax.set_ylabel('Precision')\n",
    "            \n",
    "        _ = ax.set_title('category: ' + cat_label)\n",
    "\n",
    "lines, labels = fig.axes[-1].get_legend_handles_labels()\n",
    "_ = fig.legend(lines, labels, loc='center', bbox_to_anchor=(0.4, 0.05), fontsize='x-small')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Number of true and false positives"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "for checkpoint_name, per_cat_metrics in checkpoint_metrics.items():\n",
    "    \n",
    "    if checkpoint_name not in runs_to_show:\n",
    "        continue\n",
    "    \n",
    "    print('\\n{}'.format(checkpoint_name))\n",
    "    for category, metrics in per_cat_metrics.items():\n",
    "        print('category: {}'.format(category))\n",
    "        for score_threshold in [0.5, 0.8, 0.9, 0.97]:\n",
    "            total_tp = 0\n",
    "            total_fp = 0\n",
    "            for score, tp_fp in zip(metrics['scores'], metrics['tp_fp']):\n",
    "                if score > score_threshold:\n",
    "                    if tp_fp == 1:\n",
    "                        total_tp += 1\n",
    "                    else:\n",
    "                        total_fp += 1\n",
    "                        \n",
    "            ratio = total_tp/total_fp if total_fp > 0 else None\n",
    "            print('    score_threshold: {}, tp: {}, fp: {}, tp:fp ratio: {}'.format(\n",
    "                score_threshold, total_tp, total_fp, ratio))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualize some results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [],
   "source": [
    "label_map = {\n",
    "    '1': 'animal',\n",
    "    '2': 'person',\n",
    "    '3': 'vehicle'  # will be available in megadetector v4\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_im_dir = '/Users/siyuyang/Source/temp_data/CameraTrap/samples/mdv4_1_test'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [],
   "source": [
    "runs_to_compare = ['MDv4 baseline', 'MDv4.1 epoch 5.8']\n",
    "\n",
    "results_to_compare = {}\n",
    "\n",
    "test_set_files = set()\n",
    "\n",
    "for run_name in runs_to_compare:\n",
    "    res = test_set_res[run_name]\n",
    "    im_id_to_res = {}\n",
    "    for r in res:\n",
    "        download_id = r['file'].split('/')[-1].split('.jpg')[0]\n",
    "        test_set_files.add(download_id)\n",
    "        im_id_to_res[download_id] = r\n",
    "    results_to_compare[run_name] = im_id_to_res"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "554"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff_threshold = 0.6\n",
    "\n",
    "very_diff_entries = []\n",
    "\n",
    "for download_id in test_set_files:\n",
    "    conf_scores = []\n",
    "    for run_name in runs_to_compare:\n",
    "        conf_scores.append(results_to_compare[run_name][download_id]['max_detection_conf'])\n",
    "    \n",
    "    if max(conf_scores) - min(conf_scores) > diff_threshold:\n",
    "        very_diff_entries.append(download_id)\n",
    "        \n",
    "len(very_diff_entries)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'bbox': [{'category': 'animal', 'bbox': [0.02823, 0.2205, 0.02278, 0.08518]}],\n",
       " 'file': 'Maliau/Maliau_3/OG1-E-38/20120416-005602(2)10 of 10.jpg',\n",
       " 'dataset': 'zsl_borneo',\n",
       " 'location': 'OG1-E-38',\n",
       " 'download_id': 'zsl_borneo+88b7a35a-3f14-11ea-97a2-9801a7a664ab'}"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mdv4boxes_labels_dict['zsl_borneo+88b7a35a-3f14-11ea-97a2-9801a7a664ab']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [],
   "source": [
    "false_neg_all_models = []\n",
    "false_pos_all_models = []\n",
    "\n",
    "for download_id in test_set_files:\n",
    "    is_positive = len(mdv4boxes_labels_dict[download_id]['bbox']) > 0\n",
    "    \n",
    "    conf_scores = []\n",
    "    for run_name in runs_to_compare:\n",
    "        conf_scores.append(results_to_compare[run_name][download_id]['max_detection_conf'])\n",
    "    \n",
    "    all_preds_negative = max(conf_scores) < 0.3\n",
    "    all_preds_pos = min(conf_scores) > 0.8\n",
    "\n",
    "    if is_positive and all_preds_negative:\n",
    "        false_neg_all_models.append(download_id)\n",
    "    \n",
    "    if not is_positive and all_preds_pos:\n",
    "        false_pos_all_models.append(download_id)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "588"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "0.028727770177838577"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "257"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "0.012556185264803597"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(false_neg_all_models)\n",
    "len(false_neg_all_models)/20468\n",
    "len(false_pos_all_models)\n",
    "len(false_pos_all_models)/20468"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "defaultdict(int,\n",
       "            {'awc_190430': 408,\n",
       "             'mcshea_emammal': 9,\n",
       "             'zsl_borneo': 110,\n",
       "             'rspb_gola': 10,\n",
       "             'caltech': 1,\n",
       "             'kays_emammal': 22,\n",
       "             'wpz_emammal_2018': 11,\n",
       "             'snapshotserengeti': 2,\n",
       "             'wcs': 13,\n",
       "             'idfg': 2})"
      ]
     },
     "execution_count": 112,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "false_neg_by_dataset = defaultdict(int)\n",
    "for i in false_neg_all_models:\n",
    "    dataset = i.split('+')[0]\n",
    "    false_neg_by_dataset[dataset] += 1\n",
    "false_neg_by_dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "defaultdict(int,\n",
       "            {'wcs': 91,\n",
       "             'zsl_borneo': 123,\n",
       "             'awc_190430': 20,\n",
       "             'wcs_private': 23})"
      ]
     },
     "execution_count": 117,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "false_pos_by_dataset = defaultdict(int)\n",
    "for i in false_pos_all_models:\n",
    "    dataset = i.split('+')[0]\n",
    "    false_pos_by_dataset[dataset] += 1\n",
    "false_pos_by_dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [],
   "source": [
    "sas_token = '?se=2020-05-28T00%3A18%3A00Z&sp=rl&sv=2018-03-28&sr=c&sig=IYWj8xkjI4EEzle9jan06hAyumOYxtmaL%2FhV7hmgIr0%3D' # os.environ['SAS_TOKEN']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [],
   "source": [
    "blob_service = BlobServiceClient(\n",
    "    account_url='cameratrapsc.blob.core.windows.net',\n",
    "    credential=sas_token)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [],
   "source": [
    "samples = sample(test_set_files, 40)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [],
   "source": [
    "container_client = blob_service.get_container_client('megadetectorv4-artifacts')\n",
    "for i in samples:\n",
    "    if not os.path.exists(os.path.join(test_im_dir, '{}.jpg'.format(i))):\n",
    "        with open(os.path.join(test_im_dir, 'mdv4_1_test_sample', '{}.jpg'.format(i)), 'wb') as f:\n",
    "            container_client.download_blob('mdv4_images/test/' + i + '.jpg').readinto(f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "sub_dir = 'mdv4_1_test_sample'\n",
    "\n",
    "confidence_threshold = 0.5\n",
    "\n",
    "for download_id in samples:\n",
    "    print('\\n{}'.format(download_id))\n",
    "\n",
    "    print('ground truth')\n",
    "    image = viz_utils.resize_image(viz_utils.open_image(os.path.join(test_im_dir, sub_dir, '{}.jpg'.format(download_id))), 600)\n",
    "    gt_bbox = mdv4boxes_labels_dict[download_id]['bbox']    \n",
    "    viz_utils.render_megadb_bounding_boxes(gt_bbox, image)\n",
    "    image\n",
    "\n",
    "    for run_name in runs_to_compare:\n",
    "        print(run_name, '- max_detection_conf: ', results_to_compare[run_name][download_id]['max_detection_conf'])\n",
    "        detections = results_to_compare[run_name][download_id]['detections']\n",
    "\n",
    "        # need to reload the image for each rendering\n",
    "        image = viz_utils.resize_image(viz_utils.open_image(os.path.join(test_im_dir, sub_dir, '{}.jpg'.format(download_id))), 600)\n",
    "\n",
    "        viz_utils.render_detection_bounding_boxes(detections, image, label_map=label_map,\n",
    "                                              confidence_threshold=confidence_threshold)\n",
    "        image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [],
   "source": [
    "sub_dir = 'mdv4_1_test_big_diff'\n",
    "\n",
    "for i in very_diff_entries:\n",
    "    if not os.path.exists(os.path.join(test_im_dir, '{}.jpg'.format(i))):\n",
    "        with open(os.path.join(test_im_dir, sub_dir, '{}.jpg'.format(i))), 'wb') as f:\n",
    "            container_client.download_blob('mdv4_images/test/' + i + '.jpg').readinto(f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "confidence_threshold = 0.5\n",
    "\n",
    "for download_id in sample(very_diff_entries, 10):\n",
    "    print('\\n{}'.format(download_id))\n",
    "\n",
    "    print('ground truth')\n",
    "    image = viz_utils.resize_image(viz_utils.open_image(os.path.join(test_im_dir, sub_dir, '{}.jpg'.format(download_id))), 600)\n",
    "    gt_bbox = mdv4boxes_labels_dict[download_id]['bbox']    \n",
    "    viz_utils.render_megadb_bounding_boxes(gt_bbox, image)\n",
    "    image\n",
    "\n",
    "    for run_name in runs_to_compare:\n",
    "        print(run_name, '- max_detection_conf: ', results_to_compare[run_name][download_id]['max_detection_conf'])\n",
    "        detections = results_to_compare[run_name][download_id]['detections']\n",
    "\n",
    "        # need to reload the image for each rendering\n",
    "        image = viz_utils.resize_image(viz_utils.open_image(os.path.join(test_im_dir, sub_dir, '{}.jpg'.format(download_id))), 600)\n",
    "\n",
    "        viz_utils.render_detection_bounding_boxes(detections, image, label_map=label_map,\n",
    "                                              confidence_threshold=confidence_threshold)\n",
    "        image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {},
   "outputs": [],
   "source": [
    "sub_dir = 'both_mdv4s_false_neg'\n",
    "\n",
    "for i in false_neg_all_models:\n",
    "    if not os.path.exists(os.path.join(test_im_dir, '{}.jpg'.format(i))):\n",
    "        with open(os.path.join(test_im_dir, sub_dir, '{}.jpg'.format(i)), 'wb') as f:\n",
    "            container_client.download_blob('mdv4_images/test/' + i + '.jpg').readinto(f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "confidence_threshold = 0.5\n",
    "\n",
    "for download_id in sample(false_neg_all_models, 20):\n",
    "    print('\\n{}'.format(download_id))\n",
    "\n",
    "    print('ground truth')\n",
    "    image = viz_utils.resize_image(viz_utils.open_image(os.path.join(test_im_dir, sub_dir, '{}.jpg'.format(download_id))), 600)\n",
    "    gt_bbox = mdv4boxes_labels_dict[download_id]['bbox']    \n",
    "    viz_utils.render_megadb_bounding_boxes(gt_bbox, image)\n",
    "    image\n",
    "\n",
    "    for run_name in runs_to_compare:\n",
    "        print(run_name, '- max_detection_conf: ', results_to_compare[run_name][download_id]['max_detection_conf'])\n",
    "        detections = results_to_compare[run_name][download_id]['detections']\n",
    "\n",
    "        # need to reload the image for each rendering\n",
    "        image = viz_utils.resize_image(viz_utils.open_image(os.path.join(test_im_dir, sub_dir, '{}.jpg'.format(download_id))), 600)\n",
    "\n",
    "        viz_utils.render_detection_bounding_boxes(detections, image, label_map=label_map,\n",
    "                                              confidence_threshold=confidence_threshold)\n",
    "        image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "metadata": {},
   "outputs": [],
   "source": [
    "sub_dir = 'both_mdv4s_false_pos'\n",
    "\n",
    "for i in false_pos_all_models:\n",
    "    if not os.path.exists(os.path.join(test_im_dir, '{}.jpg'.format(i))):\n",
    "        with open(os.path.join(test_im_dir, sub_dir, '{}.jpg'.format(i)), 'wb') as f:\n",
    "            container_client.download_blob('mdv4_images/test/' + i + '.jpg').readinto(f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "confidence_threshold = 0.5\n",
    "\n",
    "for download_id in sample(false_pos_all_models, 20):\n",
    "    print('\\n{}'.format(download_id))\n",
    "\n",
    "    print('ground truth')\n",
    "    image = viz_utils.resize_image(viz_utils.open_image(os.path.join(test_im_dir, sub_dir, '{}.jpg'.format(download_id))), 600)\n",
    "    gt_bbox = mdv4boxes_labels_dict[download_id]['bbox']    \n",
    "    viz_utils.render_megadb_bounding_boxes(gt_bbox, image)\n",
    "    image\n",
    "\n",
    "    for run_name in runs_to_compare:\n",
    "        print(run_name, '- max_detection_conf: ', results_to_compare[run_name][download_id]['max_detection_conf'])\n",
    "        detections = results_to_compare[run_name][download_id]['detections']\n",
    "\n",
    "        # need to reload the image for each rendering\n",
    "        image = viz_utils.resize_image(viz_utils.open_image(os.path.join(test_im_dir, sub_dir, '{}.jpg'.format(download_id))), 600)\n",
    "\n",
    "        viz_utils.render_detection_bounding_boxes(detections, image, label_map=label_map,\n",
    "                                              confidence_threshold=confidence_threshold)\n",
    "        image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:cameratraps] *",
   "language": "python",
   "name": "conda-env-cameratraps-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
